package com.zcsy.manage.service.mall;

import java.util.List;
import java.util.Map;

import com.zcsy.manage.model.base.CommonImg;
import com.zcsy.manage.model.base.ShopInfo;
import com.zcsy.manage.model.mall.GoodsCategory;
import com.zcsy.manage.model.mall.GoodsComment;
import com.zcsy.manage.model.mall.GoodsInfo;
import com.zcsy.manage.model.mall.GoodsSpecAttrNameValue;
import com.zcsy.manage.model.mall.GoodsSpecInfo;
import com.zcsy.manage.model.mall.GoodsSpecification;
import com.zcsy.manage.model.mall.OrderDetailInfo;
import com.zcsy.manage.model.mall.ShoppingCart;
import com.zcsy.manage.model.mall.vo.GoodsAttrInfo;

/**
 * @Title: IGoodsInfoService.java
 * @Package： com.zcsy.manage.service.mall 
 * @Description: 商品信息service层
 *
 * @author caiyinli 13277030520@163.com
 * @Copyright: 2015 武汉中财数元信息技术有限公司 All rights reserved.
 * @date 2016年4月26日
 * @version 1.0
 * @see JDK1.7.0_75
 * @since
 */
public interface IGoodsInfoService {


	/**
	 * @Description 根据关键字查询商品信息<br>
	 * 
	 * @param record 商品对象
	 * @return 商品对象集合
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	List<GoodsInfo> getGoodsInfoByKeyword(GoodsInfo record);

	/**
	 * @Description 根据关键字查询商品信息<br>
	 * 
	 * @param record 商品对象
	 * @return 商品对象集合
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	List<GoodsInfo> getGoodsByKeyword(GoodsInfo record);
	
	
	/**
	 * @Description 插入商品信息<br>
	 * 
	 * @param record 商品记录
	 * @return 操作结果
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	int insert(GoodsInfo record, List<GoodsAttrInfo> attrList);
	
	/**
	 * 
	 * @Description 根据商品状态查询商品信息<br>
	 * 
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年5月30日
	 * @see
	 */
	List<GoodsInfo> getGoodsInfoByState();
	
	/**
	 * @Description 根据销量获取商品列表<br>
	 * @return 
	 * @author liuying 1075817474@qq.com
	 * @date 2016年6月6日
	 * @see 
	 */
	List<GoodsInfo> getGoodsInfoBySales(String shopId);
	
	/**
	 * @Description 更新商品信息<br>
	 * 
	 * @param record 商品信息
	 * @return 操作结果
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	int updateByPrimaryKey(GoodsInfo record);
	
	/**
	 * @Description 根据主键获取商品信息<br>
	 * 
	 * @param id 商品id
	 * @return 商品信息
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	GoodsInfo getGoodsInfoByPrimaryKey(String id);
	
	/**
	 * @Description 根据商品id获取商品信息<br>
	 * 
	 * @param goodsId 商品id
	 * @return 商品信息
	 * @author lilan 1063972142@qq.com
	 * @date 2016年8月23日
	 * @see 
	 */
	GoodsInfo getGoodsInfoByGoodsId(String goodsId);
	
	/**
	 * @Description 更新商品状态<br>
	 *  @param Map---- 
     *            --id:商品Id
     *            --state:商品状态 
	 * 
	 * @return 操作结果
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	int updateGoodsStateByMap(String id,int state);
	
	/**
	 * @Description 逻辑删除商品信息<br>
	 * 
	 * @param id 主键id
	 * @return 1:操作成功 0：操作失败
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月29日
	 * @see 
	 */
	int deleteByUpdateState(String id);

	/**
	 * @Description 根据当前商品类型修改商品的排序和更新时间<br>
	 * 
	 * @param id 主键id
	 * 			updateTime 更新时间
	 * @return 1：成功 0：失败
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年6月3日
	 * @see 
	 */
	int updateSort(String id , String updateTime);
	
	/**
     * @Description 获取积分商品列表信息<br>
     * @return 商品信息list对象
     * @author yangfan 373188993@qq.com
     * @date 2016年6月30日
     * @see 
     */
    List<GoodsInfo> getIntegralGoodsInfo(Map<String, String> map);
    
    /**
     * @Description 获取积分商品列表<br>
     * 
     * @return 
     * @author caiyinli 13277030520@163.com
     * @date 2016年7月7日
     * @see 
     */
    List<GoodsInfo> getSecKillGoodsList();
    
    
    /**
     * @Description 获取等候中的秒杀商品<br>
     * @return
     * @author luoyzh 823884124@qq.com
     * @data 2016年7月12日
     */
    List<GoodsInfo> getWaitMsGoodsList();
    
    /**
     * @Description 获取等候中的秒杀商品<br>
     * @return
     * @author luoyzh 823884124@qq.com
     * @data 2016年7月12日
     */
    List<GoodsInfo> getMsGoodsList();
    
    /**
     * @Description 接口端用于获取商品详情<br>
     * 
     * @param goodsId
     * @return 
     * @author caiyinli 13277030520@163.com
     * @date 2016年7月8日
     * @see 
     */
    GoodsInfo getGoodsDetail(String goodsId);
    
    /**
     * @Description 获取商品搜索列表<br>
     * @return
     * @author luoyzh 823884124@qq.com
     * @data 2016年7月12日
     */
    List<GoodsInfo> getSearchGoodsList(GoodsInfo goodsInfo, String[] shopIds);
    
    String[] getShopIdsByCellId(String cellId);
    
    /**
     * @Description 插入或更新商品信息<br>
     *  
     * @param record  商品记录
     * @return 操作结果
     * @author lixiang 464774362@163.com
     * @date 2015年8月12日
     * @see 
     */
    
    int updateGoodsInfo(List<OrderDetailInfo> orderDetailInfos,Integer orderState);
    
    /**
     * @Description 获取商品信息详情br>
     * @param goodsId
     * @return
     * @author luoyzh 823884124@qq.com
     * @data 2016年7月12日
     */
    GoodsInfo getGoodsInfoDetail(String goodsId);
    
    /**
     * @Description 获取商品规格属性名列表br>
     * @param goodsId
     * @return
     */
    List<GoodsSpecAttrNameValue> getGoodsSpecAttrNameValueList (String goodsId);
    
    /**
     * @Description 获取商品规格列表br>
     * @param goodsId
     * @return
     */
    List<String> getGoodsSpecInfoList(String goodsId);
    
    /**
     * @Description 获取商品规格属性值列表br>
     * @param goodsId
     * @return
     */
    
    List<GoodsSpecification> getGoodsSpecWithValuesList(String goodsId);
   
    /**
     * @Description 获取商品规格属性名列表br>
     * @param goodsId
     * @return
     */
    
    List<String> getAttrNameList(String goodsId);
    
    /**
     * @Description 根据所选规格获取商品基本信息br>
     * @param specificationId
     * @return
     */
    GoodsSpecInfo getGoodsInfoBySpecId(String specificationId);
    
    /**
     * @Description 获取商品轮播图br>
     * @param goodsId
     * @return
     */
    
    List<CommonImg> getGoodsImgList(String goodsId);
    
    /**
     * @Description 获取相关商品推荐<br>
     * @param goodsId
     * @return
     */
    List<GoodsInfo> getRelatedGoodsRecommend(String shopId,String goodsId);
    
    /**
     * @Description 获取最新一条商品评价br>
     * @param goodsId
     * @return
     * @author luoyzh 823884124@qq.com
     * @data 2016年7月12日
     */
    GoodsComment getGoodsDetailOneComment(String goodsId);
    
    /**
     * @Description 获取商品评价总数<br>
     * @param goodsId
     * @return
     */
    int getGoodsCommentNum(String goodsId);
    
    /**
     * @param goodsId
     * @return
     */
    String getShopId(String goodsId);
    
    /**
     * @Description 获取商品所在店铺信息br>
     * @param goodsId
     * @return
     */
    ShopInfo getShopInfo(String shopId);
    
    /**
     * 获取购物车商品列表
     * @param userAccount
     * @return
     */
    List<ShopInfo> getShoppingCartInfoList(String userAccount,String cellId);
    
    /**
     * 获取商品二级分类
     * @param userAccount
     * @return
     */
    List<GoodsCategory> getGoodsCategorysList();
    
    /**
     * @Description 获取所有商品评价br>
     * @param goodsId
     * @return
     * @author luoyzh 823884124@qq.com
     * @data 2016年7月12日
     */
    List<GoodsComment> getGoodsDetailAllComment(String goodsId);
    
    
    /**
     * @Description 根据条件获取商品信息<br>
     * @return
     * @author yangfan 373188993@qq.com
     * @data 2016年7月12日
     */
    List<GoodsInfo> selectGoodsInfoByKeyWords(GoodsInfo goodsInfo);
    
    
    /**
     * @Description 根据条件获取店铺的商品信息<br>
     * @return
     * @author yangfan 373188993@qq.com
     * @data 2016年7月12日
     */
    List<GoodsInfo> selectShopGoodsInfoByKeyWords(GoodsInfo goodsInfo);

    /**
     * @Method: selectTopRecommendByParentId
     * @Description  查询一级分类下推荐指数最高的商品
     * @param parentId
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月27日
     * @see 
     */
    List<GoodsInfo> selectTopRecommendByParentId(String parentId);

    /**
    * @Description 获取商户商品列表<br>
    * @return List<GoodsInfo>
    * @author yangfan 373188993@qq.com
    * @data 2016年7月27日
    */
    List<GoodsInfo> getShopGoodsList(GoodsInfo goodsInfo);
    
    /**
    * @Description 根据不同排序过滤秒杀商品<br>
    * 
    * @param order 1：默认排序 2：销量从低到高 3：销量从高到低 4：价格从低到高 5：价格从高到低
    * @param secType 1：正在进行中 2：即将开始
    * @return 
    * @author caiyinli 13277030520@163.com
    * @date 2016年8月1日
    * @see 
    */
   List<GoodsInfo> getGoodsInfoByFilter(int order,int secType);
   
   /**
    * @Description 根据不同排序过滤积分商品<br>
    * 
    * @param order
    * 			1：默认排序 2：销量从低到高 3：销量从高到低 4：兑换积分从低到高 5：兑换积分从高到低
    * @author lilan 1063972142@qq.com
    * @date 2016年8月2日
    */
   List<GoodsInfo> getIntegralGoodsByFilter(int order,int findIntegral,int min,int max);
   
   /**
    * @Description 通过店铺id、商品分类id、关键字搜索商品列表<br>
    * 
    * @param shopId 店铺id
    * @param categoryId 商品分类id
    * @param keyword 关键字
    * @return 返回过滤之后的商品列表
    * @author caiyinli 13277030520@163.com
    * @date 2016年8月3日
    * @see 
    */
   List<GoodsInfo> getByshopIdAndCategoryIdAndKeyword(String shopId,String categoryId,String keyword);
   
   /**
    * 
    * @Description 根据商品名搜索商品<br>
    * 
    * @param name 商品名
    * @return 
    * @author lilan 1063972142@qq.com
    * @date 2016年8月5日
    */
   List<GoodsInfo> getGoodsInfoByName(String name, String cellId);
   

   /**
    * @Description 根据不同排序过滤积分商品<br>
    * 
    * @param order
    * 			1：销量从低到高 2：销量从高到低 3：价格从低到高  4：价格从高到低 5：评论从少到多  6：评论从多到少 7：上架时间从以前到最新  8：上架时间从最新到以前
    * @author lilan 1063972142@qq.com
    * @date 2016年8月5日
    */
   List<GoodsInfo> getmallGoodsByFilter(int order, String cellId);
   
   /**
    * 
    * @Description 根据商品分类id获取商品信息列表<br>
    * 
    * @param goodCategoryId 商品分类id
    *  @param 
    *  1：销量从低到高 2：销量从高到低 3：价格从低到高  4：价格从高到低 5：评论从少到多  6：评论从多到少 7：上架时间从以前到最新  8：上架时间从最新到以前
    * @return order
    * @author lilan 1063972142@qq.com
    * @date 2016年8月8日
    */
   List<GoodsInfo> searchGoodsByCategoryId(String goodCategoryId,int order, String cellId);
   
   /**
    * 更新商品及规格信息
    * @Method: updateGoodsInfoAndSpec
    * @param record 
    * @param attrList 
    * @author hubing
    */
   void updateGoodsInfoAndSpec(GoodsInfo record, List<GoodsAttrInfo> attrList);
   
   /**
	 * 
	 * @Description 根据商品id获取商品规格属性表<br>
	 * 
	 * @param id 商品id
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年8月23日
	 */
	List<GoodsInfo> getGoodsAttrById(String id);
	
	/**
	 * 
	 * @Description 根据商品id和规格id获取商品属性列表<br>
	 * 
	 * @param goodsId 商品id
	 * @param specId 规格id
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年8月24日
	 * @see
	 */
	List<GoodsInfo> getGoodsInfoBySpecIdAndGoodsId(String goodsId,String specId);
	
	/**
	 * 
	 * @Description 获取最近七天商品销量<br>
	 * 
	 * @param shopId 店铺id
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年8月25日
	 */
	List<GoodsInfo> getGoodsSales(String shopId);
   
	/**
	 * 
	 * @Description 根据选择的时间取出商品销量<br>
	 * 
	 * @param beginDate 开始时间
	 * @param endDate 结束时间
	 * @param shopId 店铺id
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年8月26日
	 * @see
	 */
	List<GoodsInfo> searchGoodsSalesByTime(String beginDate, String endDate,String shopId);
	
	/**
	 * 
	 * @Description 获取每个月的总销量<br>
	 * 
	 * @param secType 搜索类型：1、固定搜索，2、自由搜索
	 * @param beginDate 开始时间
	 * @param endDate 结束时间
	 * @param shopId 店铺id
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年8月29日
	 */
	List<GoodsInfo> searchSaleByMonth(Integer secType,String beginDate, String endDate,String shopId);
	
	/**
	 * 
	 * @Description 获取每个月的总销售额<br>
	 * 
	 * @param secType 搜索类型：1、固定搜索，2、自由搜索
	 * @param beginDate 开始时间
	 * @param endDate 结束时间
	 * @param shopId 店铺id
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年8月29日
	 */
	List<GoodsInfo> searchSalesVolumeByMonth(Integer secType,String beginDate, String endDate,String shopId);
	
	/**
	 * 通过广告位id，小区id获取商品信息
	 * @param params
	 * @return
	 * @author: zt
	 * @date: 2016年9月4日
	 */
	List<GoodsInfo> selectGoodsInfoByAdCategoryId(Map<String, Object> params);

	/**
	 * @Description 查询当前店铺的正常商品
	 * @param shopd 店铺id
	 * @return 商品列表
	 * @author liuying 1075817474@qq.com
	 * @date 2016年9月12日
	 * @see 
	 */
	List<GoodsInfo> getGoodsInfoByShopId(String shopId);
	
	/**
	 * 生成订单时更新商品库存和销量
	 * @Method: updateGoodsStockAndSalesOrder
	 * @param cartList 购物车订单信息
	 * @author hubing
	 */
	void updateGoodsStockAndSalesOrder(List<ShoppingCart> cartList);
	
	/**
     * 取消订单时更新商品库存和销量
     * @Method: updateGoodsStockAndSalesCancel
     * @param detailList 订单详情
     * @author hubing
     */
	void updateGoodsStockAndSalesCancel(List<OrderDetailInfo> detailList);
}
